<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  
  "http://www.w3.org/TR/html4/loose.dtd">  
<html > 
<head><title>ParticleVis User Guide</title> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
<meta name="generator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)"> 
<meta name="originator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)"> 
<!-- html --> 
<meta name="src" content="guide.tex"> 
<meta name="date" content="2007-09-05 14:59:00"> 
<link rel="stylesheet" type="text/css" href="guide.css"> 
</head><body 
>
   <div class="maketitle">



<h2 class="titleHead">ParticleVis User Guide</h2>
<div class="author" ><span 
class="cmr-12x-x-120">Vincent Hoon</span></div>
<br />
<div class="date" ></div>
   </div>
   <h3 class="likesectionHead"><a 
 id="x1-1000"></a>Contents</h3>
   <div class="tableofcontents">
   <span class="sectionToc" >1 <a 
href="#x1-20001" id="QQ2-1-2">Introduction</a></span>
<br />   <span class="sectionToc" >2 <a 
href="#x1-30002" id="QQ2-1-3">Basic Operation</a></span>
<br />   &#x00A0;<span class="subsectionToc" >2.1 <a 
href="#x1-40002.1" id="QQ2-1-4">Camera Control</a></span>
<br />   &#x00A0;<span class="subsectionToc" >2.2 <a 
href="#x1-50002.2" id="QQ2-1-6">Data Exploration</a></span>
<br />   &#x00A0;<span class="subsectionToc" >2.3 <a 
href="#x1-60002.3" id="QQ2-1-8">Keyboard Input</a></span>
<br />   <span class="sectionToc" >3 <a 
href="#x1-70003" id="QQ2-1-10">Rendering and Visualization</a></span>
<br />   &#x00A0;<span class="subsectionToc" >3.1 <a 
href="#x1-80003.1" id="QQ2-1-11">Scene Options</a></span>
<br />   &#x00A0;&#x00A0;<span class="subsubsectionToc" >3.1.1 <a 
href="#x1-90003.1.1" id="QQ2-1-13">Camera Parameters</a></span>
<br />   &#x00A0;&#x00A0;<span class="subsubsectionToc" >3.1.2 <a 
href="#x1-100003.1.2" id="QQ2-1-14">Vector Parameters</a></span>
<br />   &#x00A0;&#x00A0;<span class="subsubsectionToc" >3.1.3 <a 
href="#x1-110003.1.3" id="QQ2-1-15">Color and Lighting</a></span>
<br />   &#x00A0;<span class="subsectionToc" >3.2 <a 
href="#x1-120003.2" id="QQ2-1-16">View Commands</a></span>
<br />   &#x00A0;<span class="subsectionToc" >3.3 <a 
href="#x1-130003.3" id="QQ2-1-17">Sphere Shaders</a></span>
<br />   &#x00A0;<span class="subsectionToc" >3.4 <a 
href="#x1-140003.4" id="QQ2-1-18">Volumetric Rendering</a></span>
<br />   &#x00A0;<span class="subsectionToc" >3.5 <a 
href="#x1-150003.5" id="QQ2-1-19">Miscellaneous Tools</a></span>
<br />   <span class="sectionToc" >4 <a 
href="#x1-160004" id="QQ2-1-20">Analysis</a></span>
<br />   &#x00A0;<span class="subsectionToc" >4.1 <a 
href="#x1-170004.1" id="QQ2-1-21">Marking Particles</a></span>
<br />   &#x00A0;<span class="subsectionToc" >4.2 <a 
href="#x1-180004.2" id="QQ2-1-22">Bounding Particles</a></span>

   </div><a 
 id="x1-1000doc"></a>
   <h3 class="sectionHead"><span class="titlemark">1   </span> <a 
 id="x1-20001"></a>Introduction</h3>
<!--l. 4--><p class="noindent" >ParticleVis is an OpenGL visualization system designed to load and display
particle simulation data. It is purely a visualization tool, completely distinct from
any simulation engine that may be used to generate particle data. By loading in a
file of particle state, the entire dataset can be visualized and explored in a fully
realized three dimensional environment.
<!--l. 6--><p class="indent" >   Notable features of ParticleVis include:
      <ul class="itemize1">
      <li class="itemize">Real-time rendering of large-scale particle state data
      </li>
      <li class="itemize">Export to PNG images or AVI movies
      </li>
      <li class="itemize">Visualization of per-particle vector and scalar quantities
      </li>
      <li class="itemize">Visualization of spatial vector fields
      </li>
      <li class="itemize">Interactive color classification
      </li>
      <li class="itemize">Fully configurable geometry parser for arbitrary particle shapes
      </li>
      <li class="itemize">GLSL shader support for high-performance, high-fidelity visualization</li></ul>
<!--l. 17--><p class="noindent" >
   <h3 class="sectionHead"><span class="titlemark">2   </span> <a 
 id="x1-30002"></a>Basic Operation</h3>

<!--l. 19--><p class="noindent" >The data sources from which ParticleVis constructs visualizations are a series of
simple file formats. The fundamental data source is that of particle trajectories:
a set of discrete objects with physical positions that are specified over
time.
<!--l. 21--><p class="indent" >   The &#8220;statefiles&#8221; that contain these fundamental trajectories must contain, at
the minimum, blocks of particle positions. In addition to position, the orientation
of each particle and two vectors are acquired. This pair of vectors describes the
translational and angular velocities, in that order.
<!--l. 23--><p class="indent" >   Since state files do not contain any description of the particle shape or
appearance, an additional file that contains a geometric description of each
particle is used to generate a more accurate visualization. These particle
descriptors contain XML-based markup that concisely specifies particle
appearance. An XML descriptor is paired with a single statefile or set of similar
statefiles. At runtime, an XML descriptor can be loaded at any time onto the
currently loaded particles.
<!--l. 25--><p class="indent" >   Other sources of data may also be integrated into the particle visualization.
The user may generate and load color map files, which specify arbitrary coloring
of particles. In the case of spherical paricles, surface map files allow specification
of scalar quantities on the surface of each particle. Free-form vector fields may
also be placed into the visualization via the vector file format. More detail about
each of these datasources and the file formats associated with them is provided in
subsequent sections.
<!--l. 27--><p class="indent" >   Minimal operation of the visualization application is accomplished by simply
loading a statefile and using ParticleVis to play back and explore the data.
More accurate and visually pleasing visualization can be obtained by
loading an appropriate XML descriptor. Additional data sources may
then be added and integrated by parsing in additional filetypes. In the
ParticleVis application, the &#8220;File&#8221; menu contains all data acquisition
commands.
<!--l. 29--><p class="indent" >   Each file menu &#8220;open&#8221; or &#8220;load&#8221; entry corresponds to a filetype supported by
ParticleVis. Loading a statefile or XML descriptor will launch a file thread that
will parse the input file in the background, allowing exploration of the partial
dataset during loading. To terminate the existing file loader threads, choose
&#8220;Terminate All File Processes&#8221; from the file menu or press the comma key. Color
maps can also be loaded (with persisting and non-persisting color assignment).
For proper functionality, color maps should be imported only after the statefile
has been fully loaded. A command to load a bitmap texture image for use with
polygonal particle rendering (&#8220;Use Textures&#8221; under the View menu) is also

present. More detail about the various file formats and their syntax can be found
in Appendix <span 
class="cmbx-12">??</span>.
<!--l. 31--><p class="indent" >   Several miscellaneous commands reside in the file menu. The first is
&#8220;Generate Benchmark Frame.&#8221; This command will generate a single frame of
particle state, with random positions. The translational velocity will be
set to the same value as the random position. This feature is useful for
testing features or evaluating the performance of the system. Another file
menu command is &#8220;Report currently loaded data,&#8221; which will briefly
describe the currently loaded state and vector data. The final miscellaneous
command is &#8220;Set all to Spheres,&#8221; which will force all loaded particles
to have a spherical geometry of specified radius. The command can be
convenient when the loaded data is simple and no descriptor is readily
available.
<!--l. 33--><p class="noindent" >
   <h4 class="subsectionHead"><span class="titlemark">2.1   </span> <a 
 id="x1-40002.1"></a>Camera Control</h4>
<!--l. 35--><p class="noindent" >The viewpoint in PVis is controlled primarily by mouse input. The user can rotate
and translate the camera relative to the scene. The camera is set up in an orbiting
configuration. The camera position orbits in a spherical radius around a
target centerpoint, and dragging the mouse allows you to manipulate the
orientation and position of the sphere. Figure <a 
href="#x1-40011">1<!--tex4ht:ref: mouse-input --></a> portrays how mouse input
transforms the camera. Each type of input is described in the list that
follows.
      <dl class="description"><dt class="description">
<span 
class="cmbx-12">Drag Left Mouse Button</span> </dt><dd 
class="description">Rotate  the  camera  sphere.  Essentially  this
      spins the entire scene around a specified target point. This allows you to
      easily swing the camera around for viewing the data from an alternate
      angle. The camera will always orient itself such that &#8220;up&#8221; is in the same
      direction. Similar camera rotation can also be achieved by using the
      arrow keys.
      </dd><dt class="description">
<span 
class="cmbx-12">Drag Right Mouse Button</span> </dt><dd 
class="description">Translate the target point on the X-Z plane.
      This shifts the entire scene, translating the camera and the target point
      along the horizontal X-Z plane.

      </dd><dt class="description">
<span 
class="cmbx-12">Drag Middle Mouse Button</span> </dt><dd 
class="description">If you have a 3-button mouse, you can use
      the middle button to translate the entire scene on the X-Y plane as
      well.
      </dd><dt class="description">
<span 
class="cmbx-12">Drag Left + Right Mouse Button</span> </dt><dd 
class="description">Quickly move the camera in and
      out of the scene (dolly in and out). This decreases the radius of
      rotation of the camera sphere, bringing the camera closer to the
      target point. As the radius becomes smaller, this also has the effect of
      decreasing the scale of the camera&#8217;s movement. Similar camera
      motion can also be achieved by using the plus and minus keys. To
      narrow the angle of view of the camera and achieve fixed-position
      zooming, modify the camera&#8217;s projection angle in the &#8220;Scene
      Options&#8221; dialog (Edit menu). <hr class="figure"><div class="figure" 
><table class="figure"><tr class="figure"><td class="figure" 
><a 
 id="x1-40011"></a><img 
src="figures/SphereA.gif" alt="PIC"  
> <img 
src="figures/SphereB.gif" alt="PIC"  
> <img 
src="figures/SphereC.gif" alt="PIC"  
>
<br /> <table class="caption" 
><tr style="vertical-align:baseline;" class="caption"><td class="id">Figure&#x00A0;1: </td><td  
class="content">Mouse input transforms the camera in different ways. From left to
right, left button (rotation), right button (translation) and left+right buttons
(dollying).</td></tr></table><!--tex4ht:label?: x1-40011 -->
      <!--l. 55--><p class="noindent" ></td></tr></table></div><hr class="endfigure">
      </dd><dt class="description">
<span 
class="cmbx-12">Mouse Wheel</span> </dt><dd 
class="description">The mouse wheel moves the camera in and out exactly as the
      Left + Right drag described above.
      </dd><dt class="description">
<span 
class="cmbx-12">Mouse clicks</span> </dt><dd 
class="description">The interface uses point and click input for several features,
      notably particle marking and hiding commands. Double-clicking a particle
      will immediately mark it. Marking functionality is described in detail in the
      &#8220;Analysis&#8221; section.
      </dd><dt class="description">
<span 
class="cmbx-12">Continous Rotation</span> </dt><dd 
class="description">To cause the camera to rotate or drift around the scene,
      press the &#8220;Page Up&#8221; key. Each keypress will add velocity to the camera
      sphere in a clockwise direction. Pressing &#8220;Page Down&#8221; will add velocity in a
      counterclockwise direction. Pressing &#8220;Home&#8221; will stop the camera&#8217;s
      movement.
      </dd><dt class="description">
<span 
class="cmbx-12">Set Position Menu</span> </dt><dd 
class="description">Under the Edit menu you will find a &#8220;Set Camera Position&#8221;

      submenu that allows you to place the camera directly on the X,
      Y, or Z axes. You can also engage the &#8220;Follow Particle&#8221; camera
      mode, which allows you to lock the camera target onto a chosen
      particle (pressing &#8216;f&#8217; will also engage this mode). As the simulation
      runs, the camera will move with the particle. To release this mode,
      select the follow menu command again or press the &#8216;f&#8217; or escape
      key.
      </dd><dt class="description">
<span 
class="cmbx-12">Projection Type</span> </dt><dd 
class="description">The final camera parameter is the &#8220;Toggle Projection&#8221;
      command. This command switches between two methods of projecting
      the 3-D scene onto the 2-D viewing surface. The default camera
      view is a perspective projection: the camera&#8217;s viewing space is a
      frustrum matching the Z-depths and angle of view set in the &#8220;Scene
      Options&#8221; dialog. The camera in this mode is essentially a pinhole
      camera. Toggling the mode will switch the view to an orthogonal
      projection, where parallel lines remain parallel and there are no distance
      effects. While the perspective projection matches the eye&#8217;s perception
      more closely, the parallel projection is often superior for purposes of
      analysis.</dd></dl>
<!--l. 73--><p class="noindent" >
   <h4 class="subsectionHead"><span class="titlemark">2.2   </span> <a 
 id="x1-50002.2"></a>Data Exploration</h4>
<!--l. 75--><p class="noindent" ><hr class="figure"><div class="figure" 
><table class="figure"><tr class="figure"><td class="figure" 
>

<a 
 id="x1-50012"></a>


<!--l. 77--><p class="noindent" ><img 
src="figures/control-dialog.gif" alt="PIC"  
>
<br /> <table class="caption" 
><tr style="vertical-align:baseline;" class="caption"><td class="id">Figure&#x00A0;2: </td><td  
class="content">The control dialog for frame navigation.</td></tr></table><!--tex4ht:label?: x1-50012 -->

<!--l. 80--><p class="noindent" ></td></tr></table></div><hr class="endfigure">
<!--l. 82--><p class="indent" >   Once data is loaded, the control dialog (shown in Figure <a 
href="#x1-50012">2<!--tex4ht:ref: control-dialog --></a>) is the primary
interface to allow a user to easily navigate and playback the entire range of loaded
frames. Along the bottom of the control are five VCR-style playback buttons that
enable the user to start and stop the simulation, skip frames one-by-one, and
jump to the beginning or end of the simulation. The Position slider reflects the
current frame of the simulation relative to total frames loaded. By dragging
the slider you can skip rapidly to a specific point in the simulation. The
Maximum Speed slider allows the user to control the rate at which frames
are rendered during simulation playback. If the rendering speed is faster
than you wish, you can drag the speed slider to the appropriate frames
per second setting and the rendering of frames will be restricted to that
speed.
<!--l. 84--><p class="indent" >   Checking Reverse Play will cause the simulation to play back in reverse,
decrementing the frame counter instead of increasing it. With Repeat Play
enabled the simulation will automatically rewind itself and loop back to the
beginning (or end) of the loaded frameset.
<!--l. 86--><p class="indent" >   The &#8220;mark particle&#8221; command prompts the user to select a particle to be
marked in the same manner as the Edit <span 
class="cmsy-10x-x-120">&#x2192; </span>Mark Particle command. Marked
particles are highlighted and their paths over time are drawn. The &#8220;save frame&#8221;
command will cause the current rendered frame of the simulation to be saved to a
png or avi file.
   <h4 class="subsectionHead"><span class="titlemark">2.3   </span> <a 
 id="x1-60002.3"></a>Keyboard Input</h4>
<!--l. 90--><p class="noindent" >ParticleVis supports a number of keyboard commands for efficient control of the
viewpoint and renderer. Table <a 
href="#x1-60011">1<!--tex4ht:ref: keyboard-shortcuts --></a> lists the supported keyboard shortcuts. Most
menus in ParticleVis can also be quickly driven using keystrokes.
<!--l. 92--><p class="indent" >   Some of the keyboard commands vary slightly from their menu counterparts.
The function keys, in particular, will align the camera to the chosen axis, but
unlike the View menu command, will not recenter the view onto the origin. The
arrow and plus/minus keys function in a continous manner, and will spin or dolly
the camera as long as they are held down.
   <div class="table">

<!--l. 95--><p class="indent" >   <a 
 id="x1-60011"></a><hr class="float"><div class="float" 
><table class="float"><tr class="float"><td class="float" 
>

<div class="tabular"><table class="tabular" 
cellspacing="0" cellpadding="0" rules="groups" 
><colgroup id="TBL-2-1g"><col 
id="TBL-2-1"><col 
id="TBL-2-2"></colgroup><colgroup id="TBL-2-3g"><col 
id="TBL-2-3"></colgroup><tr 
class="hline"><td><hr></td><td><hr></td><td><hr></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-2-1-"><td colspan="3" style="white-space:nowrap; text-align:left;" id="TBL-2-1-1"  
class="td11"> <div class="multicolumn"  style="white-space:nowrap; text-align:left;"><span 
class="cmr-8">Common Keyboard Commands</span></div>
</td></tr><tr 
class="hline"><td><hr></td><td><hr></td><td><hr></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-2-2-"><td  style="white-space:nowrap; text-align:center;" id="TBL-2-2-1"  
class="td11"></td><td  style="white-space:nowrap; text-align:right;" id="TBL-2-2-2"  
class="td11">          <span 
class="cmr-8">z</span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-2-2-3"  
class="td11"><span 
class="cmr-8">Move to first frame                           </span></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-2-3-"><td  style="white-space:nowrap; text-align:center;" id="TBL-2-3-1"  
class="td11"></td><td  style="white-space:nowrap; text-align:right;" id="TBL-2-3-2"  
class="td11">         <span 
class="cmr-8">x</span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-2-3-3"  
class="td11"><span 
class="cmr-8">Move back one frame                         </span></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-2-4-"><td  style="white-space:nowrap; text-align:center;" id="TBL-2-4-1"  
class="td11"></td><td  style="white-space:nowrap; text-align:right;" id="TBL-2-4-2"  
class="td11">          <span 
class="cmr-8">c</span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-2-4-3"  
class="td11"><span 
class="cmr-8">Play/Stop                                       </span></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-2-5-"><td  style="white-space:nowrap; text-align:center;" id="TBL-2-5-1"  
class="td11"></td><td  style="white-space:nowrap; text-align:right;" id="TBL-2-5-2"  
class="td11">         <span 
class="cmr-8">v</span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-2-5-3"  
class="td11"><span 
class="cmr-8">Move forward one frame                     </span></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-2-6-"><td  style="white-space:nowrap; text-align:center;" id="TBL-2-6-1"  
class="td11"></td><td  style="white-space:nowrap; text-align:right;" id="TBL-2-6-2"  
class="td11">         <span 
class="cmr-8">b</span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-2-6-3"  
class="td11"><span 
class="cmr-8">Move to last frame                            </span></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-2-7-"><td  style="white-space:nowrap; text-align:center;" id="TBL-2-7-1"  
class="td11"></td><td  style="white-space:nowrap; text-align:right;" id="TBL-2-7-2"  
class="td11">     <span 
class="cmr-8">Ctrl-O</span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-2-7-3"  
class="td11"><span 
class="cmr-8">Open statefile                                  </span></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-2-8-"><td  style="white-space:nowrap; text-align:center;" id="TBL-2-8-1"  
class="td11"></td><td  style="white-space:nowrap; text-align:right;" id="TBL-2-8-2"  
class="td11">     <span 
class="cmr-8">Ctrl-X</span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-2-8-3"  
class="td11"><span 
class="cmr-8">Open descriptor file                           </span></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-2-9-"><td  style="white-space:nowrap; text-align:center;" id="TBL-2-9-1"  
class="td11"></td><td  style="white-space:nowrap; text-align:right;" id="TBL-2-9-2"  
class="td11">    <span 
class="cmr-8">Comma</span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-2-9-3"  
class="td11"><span 
class="cmr-8">Cancel file loading                             </span></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-2-10-"><td  style="white-space:nowrap; text-align:center;" id="TBL-2-10-1"  
class="td11"></td><td  style="white-space:nowrap; text-align:right;" id="TBL-2-10-2"  
class="td11">    <span 
class="cmr-8">Escape</span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-2-10-3"  
class="td11"><span 
class="cmr-8">Cancel current action                        </span></td>
</tr><tr 
class="hline"><td><hr></td><td><hr></td><td><hr></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-2-11-"><td colspan="3" style="white-space:nowrap; text-align:left;" id="TBL-2-11-1"  
class="td11"> <div class="multicolumn"  style="white-space:nowrap; text-align:left;"><span 
class="cmr-8">Marking Commands</span></div>
</td></tr><tr 
class="hline"><td><hr></td><td><hr></td><td><hr></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-2-12-"><td  style="white-space:nowrap; text-align:center;" id="TBL-2-12-1"  
class="td11"></td><td  style="white-space:nowrap; text-align:right;" id="TBL-2-12-2"  
class="td11">         <span 
class="cmr-8">p</span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-2-12-3"  
class="td11"><span 
class="cmr-8">Mark particle by mouse                      </span></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-2-13-"><td  style="white-space:nowrap; text-align:center;" id="TBL-2-13-1"  
class="td11"></td><td  style="white-space:nowrap; text-align:right;" id="TBL-2-13-2"  
class="td11">          <span 
class="cmr-8">i</span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-2-13-3"  
class="td11"><span 
class="cmr-8">Mark particle by ID                          </span></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-2-14-"><td  style="white-space:nowrap; text-align:center;" id="TBL-2-14-1"  
class="td11"></td><td  style="white-space:nowrap; text-align:right;" id="TBL-2-14-2"  
class="td11">         <span 
class="cmr-8">h</span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-2-14-3"  
class="td11"><span 
class="cmr-8">Hide particle                                    </span></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-2-15-"><td  style="white-space:nowrap; text-align:center;" id="TBL-2-15-1"  
class="td11"></td><td  style="white-space:nowrap; text-align:right;" id="TBL-2-15-2"  
class="td11">          <span 
class="cmr-8">f</span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-2-15-3"  
class="td11"><span 
class="cmr-8">Follow particle                                 </span></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-2-16-"><td  style="white-space:nowrap; text-align:center;" id="TBL-2-16-1"  
class="td11"></td><td  style="white-space:nowrap; text-align:right;" id="TBL-2-16-2"  
class="td11">         <span 
class="cmr-8">u</span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-2-16-3"  
class="td11"><span 
class="cmr-8">Unmark all particles                          </span></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-2-17-"><td  style="white-space:nowrap; text-align:center;" id="TBL-2-17-1"  
class="td11"></td><td  style="white-space:nowrap; text-align:right;" id="TBL-2-17-2"  
class="td11">     <span 
class="cmr-8">Period</span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-2-17-3"  
class="td11"><span 
class="cmr-8">Perform visibility selection                  </span></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-2-18-"><td  style="white-space:nowrap; text-align:center;" id="TBL-2-18-1"  
class="td11"></td><td  style="white-space:nowrap; text-align:right;" id="TBL-2-18-2"  
class="td11">  <span 
class="cmr-8">Semicolon</span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-2-18-3"  
class="td11"><span 
class="cmr-8">Visibility selection on region               </span></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-2-19-"><td  style="white-space:nowrap; text-align:center;" id="TBL-2-19-1"  
class="td11"></td><td  style="white-space:nowrap; text-align:right;" id="TBL-2-19-2"  
class="td11">      <span 
class="cmr-8">Slash</span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-2-19-3"  
class="td11"><span 
class="cmr-8">Invert current marking selection           </span></td>
</tr><tr 
class="hline"><td><hr></td><td><hr></td><td><hr></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-2-20-"><td colspan="3" style="white-space:nowrap; text-align:left;" id="TBL-2-20-1"  
class="td11"> <div class="multicolumn"  style="white-space:nowrap; text-align:left;"><span 
class="cmr-8">Render Commands</span></div>
</td></tr><tr 
class="hline"><td><hr></td><td><hr></td><td><hr></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-2-21-"><td  style="white-space:nowrap; text-align:center;" id="TBL-2-21-1"  
class="td11"></td><td  style="white-space:nowrap; text-align:right;" id="TBL-2-21-2"  
class="td11">         <span 
class="cmr-8">a</span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-2-21-3"  
class="td11"><span 
class="cmr-8">Auto-set scene options                       </span></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-2-22-"><td  style="white-space:nowrap; text-align:center;" id="TBL-2-22-1"  
class="td11"></td><td  style="white-space:nowrap; text-align:right;" id="TBL-2-22-2"  
class="td11">        <span 
class="cmr-8">1-5</span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-2-22-3"  
class="td11"><span 
class="cmr-8">Set geometry quality (lowest to highest)</span></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-2-23-"><td  style="white-space:nowrap; text-align:center;" id="TBL-2-23-1"  
class="td11"></td><td  style="white-space:nowrap; text-align:right;" id="TBL-2-23-2"  
class="td11">         <span 
class="cmr-8">6</span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-2-23-3"  
class="td11"><span 
class="cmr-8">Toggle sphere shaders                        </span></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-2-24-"><td  style="white-space:nowrap; text-align:center;" id="TBL-2-24-1"  
class="td11"></td><td  style="white-space:nowrap; text-align:right;" id="TBL-2-24-2"  
class="td11">          <span 
class="cmr-8">l</span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-2-24-3"  
class="td11"><span 
class="cmr-8">Toggle lighting                                 </span></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-2-25-"><td  style="white-space:nowrap; text-align:center;" id="TBL-2-25-1"  
class="td11"></td><td  style="white-space:nowrap; text-align:right;" id="TBL-2-25-2"  
class="td11">      <span 
class="cmr-8">t, F5</span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-2-25-3"  
class="td11"><span 
class="cmr-8">Toggle texturing                               </span></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-2-26-"><td  style="white-space:nowrap; text-align:center;" id="TBL-2-26-1"  
class="td11"></td><td  style="white-space:nowrap; text-align:right;" id="TBL-2-26-2"  
class="td11">     <span 
class="cmr-8">Ctrl-P</span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-2-26-3"  
class="td11"><span 
class="cmr-8">Toggle particles                                </span></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-2-27-"><td  style="white-space:nowrap; text-align:center;" id="TBL-2-27-1"  
class="td11"></td><td  style="white-space:nowrap; text-align:right;" id="TBL-2-27-2"  
class="td11">     <span 
class="cmr-8">Ctrl-V</span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-2-27-3"  
class="td11"><span 
class="cmr-8">Toggle translational vectors                </span></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-2-28-"><td  style="white-space:nowrap; text-align:center;" id="TBL-2-28-1"  
class="td11"></td><td  style="white-space:nowrap; text-align:right;" id="TBL-2-28-2"  
class="td11">     <span 
class="cmr-8">Ctrl-R</span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-2-28-3"  
class="td11"><span 
class="cmr-8">Toggle rotational vectors                    </span></td>
</tr><tr 
class="hline"><td><hr></td><td><hr></td><td><hr></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-2-29-"><td colspan="3" style="white-space:nowrap; text-align:left;" id="TBL-2-29-1"  
class="td11"> <div class="multicolumn"  style="white-space:nowrap; text-align:left;"><span 
class="cmr-8">Camera Commands</span></div>
</td></tr><tr 
class="hline"><td><hr></td><td><hr></td><td><hr></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-2-30-"><td  style="white-space:nowrap; text-align:center;" id="TBL-2-30-1"  
class="td11"></td><td  style="white-space:nowrap; text-align:right;" id="TBL-2-30-2"  
class="td11">        <span 
class="cmr-8">F2</span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-2-30-3"  
class="td11"><span 
class="cmr-8">Point camera along X axis                  </span></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-2-31-"><td  style="white-space:nowrap; text-align:center;" id="TBL-2-31-1"  
class="td11"></td><td  style="white-space:nowrap; text-align:right;" id="TBL-2-31-2"  
class="td11">        <span 
class="cmr-8">F3</span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-2-31-3"  
class="td11"><span 
class="cmr-8">Point camera along Y axis                  </span></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-2-32-"><td  style="white-space:nowrap; text-align:center;" id="TBL-2-32-1"  
class="td11"></td><td  style="white-space:nowrap; text-align:right;" id="TBL-2-32-2"  
class="td11">        <span 
class="cmr-8">F4</span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-2-32-3"  
class="td11"><span 
class="cmr-8">Point camera along Z axis                  </span></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-2-33-"><td  style="white-space:nowrap; text-align:center;" id="TBL-2-33-1"  
class="td11"></td><td  style="white-space:nowrap; text-align:right;" id="TBL-2-33-2"  
class="td11"><span 
class="cmr-8">Arrow Keys</span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-2-33-3"  
class="td11"><span 
class="cmr-8">Change camera angle                         </span></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-2-34-"><td  style="white-space:nowrap; text-align:center;" id="TBL-2-34-1"  
class="td11"></td><td  style="white-space:nowrap; text-align:right;" id="TBL-2-34-2"  
class="td11"><span 
class="cmr-8">Plus/Minus</span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-2-34-3"  
class="td11"><span 
class="cmr-8">Move closer to or farther from target    </span></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-2-35-"><td  style="white-space:nowrap; text-align:center;" id="TBL-2-35-1"  
class="td11"></td><td  style="white-space:nowrap; text-align:right;" id="TBL-2-35-2"  
class="td11">   <span 
class="cmr-8">Page Up</span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-2-35-3"  
class="td11"><span 
class="cmr-8">Spin camera clockwise                       </span></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-2-36-"><td  style="white-space:nowrap; text-align:center;" id="TBL-2-36-1"  
class="td11"></td><td  style="white-space:nowrap; text-align:right;" id="TBL-2-36-2"  
class="td11"> <span 
class="cmr-8">Page Down</span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-2-36-3"  
class="td11"><span 
class="cmr-8">Spin camera counterclockwise              </span></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-2-37-"><td  style="white-space:nowrap; text-align:center;" id="TBL-2-37-1"  
class="td11"></td><td  style="white-space:nowrap; text-align:right;" id="TBL-2-37-2"  
class="td11">     <span 
class="cmr-8">Home</span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-2-37-3"  
class="td11"><span 
class="cmr-8">Halt camera spin                              </span></td>
</tr><tr 
class="hline"><td><hr></td><td><hr></td><td><hr></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-2-38-"><td  style="white-space:nowrap; text-align:center;" id="TBL-2-38-1"  
class="td11"></td>
</tr></table></div>
<br /> <table class="caption" 
><tr style="vertical-align:baseline;" class="caption"><td class="id">Table&#x00A0;1: </td><td  
class="content">Keyboard commands in ParticleVis.</td></tr></table><!--tex4ht:label?: x1-60011 -->

   </td></tr></table></div><hr class="endfloat" />
   </div>
   <h3 class="sectionHead"><span class="titlemark">3   </span> <a 
 id="x1-70003"></a>Rendering and Visualization</h3>
<!--l. 143--><p class="noindent" >A wide variety of methods are available for use in visualizing particle data. The
choice of data to visualize, which elements to emphasize, and the balance between
visual fidelity and performance are configurable elements of the visualization. The
primary elements that ParticleVis can visualize are the particles themselves and
various forms of vector information.
<!--l. 145--><p class="indent" >   Particle rendering is usually performed using polygonal approximations of
geometry described in an XML descriptor file. Several levels of quality for the
generated geometry are available for selection. Per-vertex lighting and user-loaded
textures can optionally be applied to the surface of rendered polygonal particles.
The set of particles can be rendered in a transparent fashion to give a better view
of the entire volume of particles. When spheres comprise much of the particle
data, specialized GLSL shaders that quickly draw pixel-accurate spheres are
available. These high performance shaders are only available if newer (OpenGL
2.0 support) hardware and drivers are present. Texturing is not currently available
when using sphere shaders, but lighting models are applied on a per-pixel basis,
allowing high fidelity visualization at any scale. Finally, a point rendering mode
allows for minimal rendering of each particle (as a fixed-size square of pixels).
Using points allows for high rendering performance at the cost of visual
fidelity.
<!--l. 148--><p class="indent" >   A number of vector data sources may also be rendered within ParticleVis.
Data attached to the particles themselves in the form of translational and
rotational velocity vectors and normal vectors can be chosen for rendering. Each
type of rendered vector is represented by a line and arrowhead, where each
arrowhead is unique to the type of vector rendered. Data
from vector files can also be rendered into the scene.
<!--l. 150--><p class="noindent" >
   <h4 class="subsectionHead"><span class="titlemark">3.1   </span> <a 
 id="x1-80003.1"></a>Scene Options</h4>
<!--l. 151--><p class="noindent" >Parameters for many of the scene rendering and visualization functions are found
in the &#8220;Scene Options&#8221; dialog, which is found under the Edit menu (shown in

Figure <a 
href="#x1-80013">3<!--tex4ht:ref: scene-dialog --></a>). Numerical options for the camera, vector rendering, lighting, and other
miscellaneous options are found in the scene dialog.
<!--l. 153--><p class="indent" >   <hr class="figure"><div class="figure" 
><table class="figure"><tr class="figure"><td class="figure" 
>

<a 
 id="x1-80013"></a>


<!--l. 155--><p class="noindent" ><img 
src="figures/scene-dialog.gif" alt="PIC"  
>
<br /> <table class="caption" 
><tr style="vertical-align:baseline;" class="caption"><td class="id">Figure&#x00A0;3: </td><td  
class="content">The scene dialog.</td></tr></table><!--tex4ht:label?: x1-80013 -->

<!--l. 158--><p class="indent" >   </td></tr></table></div><hr class="endfigure">
   <h5 class="subsubsectionHead"><span class="titlemark">3.1.1   </span> <a 
 id="x1-90003.1.1"></a>Camera Parameters</h5>
<!--l. 161--><p class="noindent" >
      <dl class="description"><dt class="description">
<span 
class="cmbx-12">Projection Angle</span> </dt><dd 
class="description">The Projection Angle specifies the angle of view that
      the camera sees when using perspective projection. A narrower angle
      affords less distortion and larger particles, whereas a larger angle allows
      more of the scene to be viewed at once.
      </dd><dt class="description">
<span 
class="cmbx-12">Min and Max Z Distance</span> </dt><dd 
class="description">The minimum and maximum Z values are the
      lower and upper limits of distance from the camera within the scene.
      Normally, choosing automatic scene settings will set these values (based
      on the loaded range of positions). To manually set these values, choose
      values such that no particle is beyond the max Z or nearer than the
      minimum Z (where it would be clipped). Setting very low values for
      the minimum Z will allow the camera to be extremely close to viewed
      particles without clipping, but it may negatively impact the precision
      of rendering overlapping objects. The minimum Z must be greater than
      0 for proper projection.
      </dd><dt class="description">
<span 
class="cmbx-12">Distance/Radius of Rotation</span> </dt><dd 
class="description">This allows the user to manually enter the
      distance from the camera position to the target. This affects the radius
      of the camera&#8217;s spherical rotation. See the Camera Control section for
      more information on camera operation.
      </dd><dt class="description">
<span 
class="cmbx-12">Orthogonal Projection</span> </dt><dd 
class="description">This  option  enables  an  orthogonal  projection
      rather than a perspective projection. The orthogonal projection is a
      parallel projection of the scene, and may be more suitable for analysis
      than the perspective projection.
      </dd><dt class="description">
<span 
class="cmbx-12">Up Vector</span> </dt><dd 
class="description">If the natural direction of data if different than the default (Y
      axis), you can change to another axis using these radio buttons. Since

      the ParticleVis camera cannot be &#8220;rolled&#8221; away from the up vector,
      this option can allow more natural viewing of some particle data.
      </dd><dt class="description">
<span 
class="cmbx-12">Override Camera Control</span> </dt><dd 
class="description">By  enabling  this  override,  the  user  may
      numerically enter values for the camera position and target. This allows
      specification of exact viewpoints reproducibly. When the override is not
      enabled, the current position and look-at target are always placed into
      the dialog. You may also use the positioner dialog to set force-camera
      coordinates graphically. If you wish to see the current position of the
      camera, note that the position and target fields are updated whenever
      the scene dialog is opened.</dd></dl>
<!--l. 180--><p class="noindent" >
   <h5 class="subsubsectionHead"><span class="titlemark">3.1.2   </span> <a 
 id="x1-100003.1.2"></a>Vector Parameters</h5>
<!--l. 181--><p class="noindent" >
      <dl class="description"><dt class="description">
<span 
class="cmbx-12">Maximum Velocity/Translational Velocity</span> </dt><dd 
class="description">When  vectors  are  drawn
      they are color-coded by their magnitude. These two parameters allow
      you to change the upper value of the mapping, such that the maximum
      value the user enters is the high end of the color gradient. The optimal
      setting will vary between datasets, and should be set such that the
      highest range of information is mapped into the color gradient. These
      parameters also affect Color Scheme mappings in an identical manner.
      </dd><dt class="description">
<span 
class="cmbx-12">Vector Length</span> </dt><dd 
class="description">Setting this value will scale the length of all vectors. When
      this  value  equals  1.0  the  vectors  are  rendered  with  length  exactly
      proportional to their values in the raw data, in the same coordinates
      as particles. It may be appropriate to rescale the data, so this factor
      should be set such that the vector length is suitable for visualization.
      </dd><dt class="description">
<span 
class="cmbx-12">Marked Path Length</span> </dt><dd 
class="description">This  parameter  determines  the  length  of  the
      pathlines   that   are   drawn   behind   marked   particles.   The   value
      corresponds to the number of frames the path is drawn over. Setting

      the parameter to 0 will disable pathlines entirely. If the pathline length
      is long, selecting many particles at once may result in poor performance
      or excessive memory usage.</dd></dl>
<!--l. 191--><p class="noindent" >
   <h5 class="subsubsectionHead"><span class="titlemark">3.1.3   </span> <a 
 id="x1-110003.1.3"></a>Color and Lighting</h5>
<!--l. 192--><p class="noindent" >
      <dl class="description"><dt class="description">
<span 
class="cmbx-12">Alpha Transparency</span> </dt><dd 
class="description">When &#8220;Draw Transparent Particles&#8221; is enabled, this
      value determines the degree of transparency of the particles. A value
      of 1 is completely opaque and a value of 0 is completely transparent.
      The ultimate appearance of transparent particles is also determined by
      the blending mode that is being used: additive blending will &#8220;stack up&#8221;
      the alpha values of overlapping particles, while depth-sorted blending
      composites underlying layers multiplicatively, leading to a more natural
      translucency.
      </dd><dt class="description">
<span 
class="cmbx-12">Lighting Settings</span> </dt><dd 
class="description">ParticleVis uses two directional lights by default. In this
      section you may disable or enable the two lights by checking them, and
      you can adjust the brightness and direction of the lights by editing
      their vectors. The light direction is a vector from the specified point
      to  the  origin.  The  brightness  determines  the  intensity  of  the  light
      source, from 0 to 1&#8211; higher intensity values can be entered but may
      appear abnormal. The positioner dialog can be used to adjust the light
      direction graphically.
      </dd><dt class="description">
<span 
class="cmbx-12">Miscellaneous Options</span> </dt><dd 
class="description">Here you can toggle on or off the display of the
      timestamp in the lower left corner and the display of the frames per
      second rendered in the lower right. The FPS counter will be updated
      once every three seconds.</dd></dl>

<!--l. 203--><p class="noindent" >
   <h4 class="subsectionHead"><span class="titlemark">3.2   </span> <a 
 id="x1-120003.2"></a>View Commands</h4>
<!--l. 204--><p class="noindent" >In ParticleVis, the &#8220;View&#8221; menu contains most of the options that control the
renderer.
      <dl class="description"><dt class="description">
<span 
class="cmbx-12">Set Geometry Quality</span> </dt><dd 
class="description">Choosing  one  of  the  listed  options  will  set  all
      rendered particles to the specified level of geometric detail. By setting
      lower  levels  of  detail  rendering  performance  can  be  gained  at  the
      expense of visual fidelity. If the program seems to be running too slowly,
      lower levels of detail should be used. An option also exists for enabling
      the use of sphere-specific shaders. When this option is true, all spheres
      in the simulation will be rendered using vertex and fragment shaders
      to quickly render per-pixel accurate spheres. Subsection <a 
href="#x1-130003.3">3.3<!--tex4ht:ref: sphereshaders --></a> contains
      more detail on the various shading styles, which can be selected from
      the submenu.
      </dd><dt class="description">
<span 
class="cmbx-12">Set Color Scheme</span> </dt><dd 
class="description">Allows you to change the color scheme used to color
      particles. Whenever color is not specified by the XML descriptor or a
      loaded color map, the selected scheme will be used to color particles.
      You may choose to use white particles, a translational velocity scheme,
      and a rotational velocity scheme. The maximum value of translational
      and rotational velocity, defined in the &#8220;Scene Options&#8221; dialog (Edit
      menu), is used to derive the range of values that is mapped onto the
      color gradient. A set of common color gradients is provided, and the
      &#8220;Edit Current Gradient&#8221; will bring up the gradient creator, described
      in the next section. The &#8220;Clear Color Maps&#8221; command will clears any
      color-map data specified from file or XML.
      </dd><dt class="description">
<span 
class="cmbx-12">Set Transparency</span> </dt><dd 
class="description">Enabling  this  option  will  render  some  or  all  of  the
      particles in a partially transparent fashion. Only those particles which
      are marked via &#8220;Mark Particle&#8221; or have been set as &#8220;noTransparent&#8221;
      in the XML descriptor are drawn as solid. By enabling this option and
      then marking particles it is possible to analyze a subset of the particles
      in detail while still visualizing the entire particle set. The rendering
      mode for transparency is determined by the submenu choice. Additive
      blending will use a fast method to draw each transparent particle, but

      it can oversaturate the coloring if the alpha is not carefully set. Z-sorted
      alpha blending adds a sorting step which incurs a performance hit, but
      the rendered particles are drawn in a much more robust manner by
      using order-dependent alpha blending. When certain bounding options
      are enabled (draw under transparency), particles within bounds may
      always use opaque rendering.
      </dd><dt class="description">
<span 
class="cmbx-12">Set Surface Map Properties</span> </dt><dd 
class="description">When a surface map has been loaded into
      the  application,  this  dialog  will  allow  the  tuning  of  the  generated
      texture  coordinates.  The  maximum  value  is  set  to  the  maximum
      recorded surface intensity upon load, but it can be raised or lowered.
      The mapping type allows a logarithmic or square root relation to be
      used in place of the standard linear mapping between scalar intensity
      and generated texture coordinates.
      </dd><dt class="description">
<span 
class="cmbx-12">Use Points</span> </dt><dd 
class="description">Enabling  this  option  will  render  all  the  particles  as  point
      primitives  (squares  of  pixels)  instead  of  polygonal  models.  The
      rendering performance of sprites is typically must faster than polygonal
      models,  and  may  be  faster  than  use  of  sphere  shaders.  With  very
      large collections of particles, this option may the only way to allow
      rendering at acceptable speeds. As sprites, though, the particles cannot
      be lit or textured, have no orientation, and are much more difficult to
      distinguish.
      </dd><dt class="description">
<span 
class="cmbx-12">Use Textures</span> </dt><dd 
class="description">Enabling  this  option  will  add  textures  to  the  surface  of
      polygonal  particles.  Texturing  usually  has  a  minimal  performance
      impact and can enhance presentation. A textured surface is useful for
      discerning particle orientation in particular.
      </dd><dt class="description">
<span 
class="cmbx-12">Use Lighting</span> </dt><dd 
class="description">Lighting the particles comes at a small performance cost, but
      it vastly improves the appearance of the particles in most situations.
      It  is  enabled  by  default.  More  options  controlling  the  number  and
      configuration of lights may be found in the &#8220;Scene Options&#8221; dialog
      (Edit menu).

      </dd><dt class="description">
<span 
class="cmbx-12">Use Specular Highlights</span> </dt><dd 
class="description">This  is  a  lighting  option  that  calculates  a
      specular highlight on all polygonal surfaces. You may find that this
      adds  visual  appeal  to  the  particles,  but  the  option  may  only  be
      effective at higher polygon counts. This option will usually incur a small
      performance cost.
      </dd><dt class="description">
<span 
class="cmbx-12">Draw Axes</span> </dt><dd 
class="description">When enabled, a set of multicolor axes will be drawn on the
      origin. The axes are scaled to fit in the viewing window, and are labeled
      by coordinate.
      </dd><dt class="description">
<span 
class="cmbx-12">Draw Particles</span> </dt><dd 
class="description">This option controls the rendering of the actual particle
      objects. Disabling it may be useful when you are rendering some other
      information that you wish to emphasize, such as vectors.
      </dd><dt class="description">
<span 
class="cmbx-12">Draw Normal Vectors</span> </dt><dd 
class="description">When this option is enabled each particle is given
      a  normal  vector  that  corresponds  to  the  up  vector  in  the  object
      coordinates of the individual particle. This is useful to emphasize the
      orientation of particles where it is otherwise difficult to visualize.
      </dd><dt class="description">
<span 
class="cmbx-12">Draw Translational Velocity Vectors</span> </dt><dd 
class="description">When   this   option   is   enabled
      velocity vectors (the first loaded vector) for each particle are drawn.
      These vectors are color-coded according to magnitude. The length of
      the vector itself, as well as the mapping of magnitude to color, can be
      adjusted in the &#8220;Scene Options&#8221; dialog (Edit menu).
      </dd><dt class="description">
<span 
class="cmbx-12">Draw Rotational Velocity Vectors</span> </dt><dd 
class="description">When this option is enabled angular
      velocity vectors (the second loaded vector) for each particle are drawn.
      The vectors correspond to an axis of rotation and angular velocity
      about that axis. These vectors are color-coded according to magnitude.
      The length of the vector itself, as well as the mapping of magnitude to
      color, can be adjusted in the &#8220;Scene Options&#8221; dialog (Edit menu).
      </dd><dt class="description">
<span 
class="cmbx-12">Full-screen Mode</span> </dt><dd 
class="description">This command will size the rendering window such that

      it fills the entire screen. This is quite useful for presentations. Pressing
      &#8220;Escape&#8221; or choosing the option again will reset the screen to normal.
      While in fullscreen mode you cannot see the menu bar, but you can
      still open it by using shortcut keys (e.g. Alt-V).
      </dd><dt class="description">
<span 
class="cmbx-12">Set Window to Size</span> </dt><dd 
class="description">When outputting image files it is often useful to set
      the window size to a preset value. By choosing one of the submenu
      sizes you can force the rendering window to a certain dimension. Note
      that the rendering window will not normally be able to scale beyond
      the resolution of the monitor. For higher resolution ouput try using the
      command-line interface.
      </dd><dt class="description">
<span 
class="cmbx-12">Show Control Dialog</span> </dt><dd 
class="description">This command will show the control dialog if it has
      been closed or hidden.</dd></dl>
<!--l. 239--><p class="noindent" >
   <h4 class="subsectionHead"><span class="titlemark">3.3   </span> <a 
 id="x1-130003.3"></a>Sphere Shaders</h4>
<!--l. 242--><p class="noindent" >The use of sphere shaders (enabled under the &#8220;View&#8221; menu or pressing &#8216;6&#8217; )
merits additional discussion. The sphere shader types available represent a set of
shading programs, written in the GLSL language, that efficiently render
pixel-accurate spheres. The different styles of shaders allow the use of
various lighting options, image space outlines, rendering styles, and velocity
information.
<!--l. 244--><p class="indent" >   The first two shader types are labled &#8220;Phong Shading&#8221; and &#8220;Phong +
Outlines.&#8221; These shading styles are both named for their use of the Blinn-Phong
shading model. This lighting model, which is also used by OpenGL for lighting
polygonal models, is used for pixel-accurate lighting, including specular highlights,
on the spheres. Normally only the first light is used for specular reflections (for
efficiency), but when the highest quality (&#8220;ultra&#8221;) is used and the first phong
shader is selected, both lights will contribute a specular term. The primary
difference between the two programs is that the outline shader will add a
one-pixel black outline to each rendered sphere. This outline can be useful for
distinguishing densely arrayed particles.
<!--l. 246--><p class="indent" >   The &#8220;Basic Shading&#8221; shader type is a higher performance shader that uses

only one light. Only the diffuse term of the lighting model is used, and no
highlights are calculated. To further increase performance, the depth correction on
the spheres has been approximated. This may lead to the appearance of incorrect
intersections between overlapping spheres, but this shader is the fastest type that
still retains per-pixel lighting.
<!--l. 248--><p class="indent" >   The &#8220;Cartoon&#8221; shader type uses a cel-style lighting approach and thick
(two pixel) outlines to give a stylized appearance to rendered spheres.
Only the first light is used, and the specular term is included. As with
the &#8220;Phong + Outlines&#8221; style, the outline size is based on screen-space
pixels.
<!--l. 250--><p class="indent" >   The &#8220;Radial Sprite&#8221; shader type is one of the fastest ways to render particles.
Only the outline of the sphere is calculated, and no lighting is used. When lighting
is enabled in the renderer, the distance from the center of the particle is used to
attenuate the particle color. This particle style can be effective when used with
the &#8220;Additive Alpha Blending&#8221; transparency option. When lighting is disabled,
a uniformly colored disk is generated. This shader type is intended for
use when high rendering performance or clarity of particle coloring is
important.
<!--l. 252--><p class="indent" >   The &#8220;Perspective-Correct&#8221; shader type employs a per-pixel intersection test
that works with complete accuracy when using perspective projections. For
performance reasons, the other shader types assume that a orthogonal (parallel)
projection is being used by the camera, and project the silhouette of the sphere
as a circle. In the case of a perspective projection, the actual projected
silhouette is in fact an ellipse. This difference is not generally a critical one,
especially with a lower projection angle, as the geometric distortion is
usually quite low. If so desired, though, this shader type allows the exact
geometric projection to be used in the shader, albeit at a somewhat high
performance cost. In other respects this shader resembles the &#8220;Basic Shading&#8221;
type.
<!--l. 254--><p class="indent" >   The remaining shading types employ translational velocity information from
each particle. These shaders are designed to function under an orthogonal
projection. The &#8220;Velocity Glyph&#8221; shader will use the translational velocity vector
of the particle to render an arrow glyph that points in the screen-space direction
of the particle&#8217;s motion. This glyph is inscribed onto the surface of the sphere,
and does not take the vector magnitude into account. The resulting effect is
similar to a hedgehog-style vector plot. Enabling color mapping can help to
elucidate the magnitude of the vectors.
<!--l. 256--><p class="indent" >   To incorporate the effect of vector magnitude directly into the arrow glyph,

the &#8220;Velocity Glyph (Scaled)&#8221; shader style can also be used. This shader type uses
the translational velocity vector length parameter (set in the &#8220;Scene Options&#8221;
dialog) to scale the thickness of the glyph according to its magnitude. By setting
the vector length to an appropriate ratio, a suitable range of thicknesses can be
achieved. The vector length scaler (see <a 
href="#x1-150003.5">3.5<!--tex4ht:ref: misc-tools --></a>) is a good tool for accomplishing
this.
<!--l. 258--><p class="indent" >   The &#8220;Velocity Motion Blur&#8221; shader style uses the translational velocity to
create a camera motion blur effect on moving particles. This shader blurs the
particles in the screen-space direction of their translational velocity vector, by a
factor calculated from the translational velocity length parameter and the vector
magnitude (as in the previous shader type). This effect has a high performance
cost, but can be useful for presentational purposes. To accomplish proper
composition, Z-sorted alpha blending is used when this shader type is
enabled.
<!--l. 260--><p class="noindent" >
   <h4 class="subsectionHead"><span class="titlemark">3.4   </span> <a 
 id="x1-140003.4"></a>Volumetric Rendering</h4>
<!--l. 262--><p class="noindent" >ParticleVis provides the ability to render static volumetric data into the
visualization. By loading a volume file with the corresponding command under the
&#8220;Analysis&#8221; menu, a file of raw volume data can be rendered. To enable and
disable the use of the loaded volume data, use the &#8220;Enable Volumetric Rendering&#8221;
command under the &#8220;Analysis&#8221; menu.
<!--l. 264--><p class="indent" >   The rendering of volume data can be adjusted by choosing the &#8220;Volumetric
Rendering Options&#8221; command under &#8220;Analysis.&#8221; If no volume data is currently
loaded, choosing &#8220;Use Dummy Data&#8221; will generate a spherical volume for testing
purposes. Each X-Y slice can be normalized individually, for both coloring and
alpha intensity, as opposed to globally by checking the appropriate option. The
volume slices will use alpha-based blending by default, but an additive blending
mode can also be enabled. Each time the volume rendering options dialog is used,
the current gradient will be re-applied to the loaded volume data, updating the
volume&#8217;s coloring.
<!--l. 266--><p class="indent" >   The &#8220;Max Alpha&#8221; of the volume determines the transparency range the slices
are mapped to, from zero to 255. Raising or lowering it will change the overall
transparency of the volume. &#8220;Slice size&#8221; is the measure of the width of
the set of slices, and should be set to match the volume&#8217;s scale, so that
no clipping occurs during rendering. The number of slices is the total

number of generated slices. Increasing the slice count will result in a higher
fidelity rendering, but will also increase load in terms of graphical fill
rate.
<!--l. 268--><p class="indent" >   The volume can be transformed using the origin, rotation, and scale fields in
the options dialog. The origin is the centerpoint of the volume in world
coordinates. The rotation fields describe a series of rotations in degrees, in order
X-Y-Z, which can reorient the volume as needed. The scale fields allow rescaling
of the volume in each axial direction. The volume will first be scaled, then
rotated, and then translated.
<!--l. 270--><p class="indent" >   The analysis menu also contains a &#8220;Create Density Volume&#8221; command that
can generate a simple spatial view of average density based on the loaded particle
state data. Once the state data is loaded, this command can be executed by
inputting a resolution for the cubic size of the volume. A large resolution will
produce cubic cells of small size, and vice versa. The loaded state data will
then be traversed and the presence of particles in each spatial cell will be
compiled and averaged over all frames. For each frame, every particle that is
present in a cell will increment the cell&#8217;s density measure by one. The
current gradient is then used to color each cell based on its normalized
density.
<!--l. 272--><p class="noindent" >
   <h4 class="subsectionHead"><span class="titlemark">3.5   </span> <a 
 id="x1-150003.5"></a>Miscellaneous Tools</h4>
<!--l. 275--><p class="noindent" >Several other functions within ParticleVis allow configuration of rendering and
visualization: the gradient editor, the positioning tool, and the vector length
scaling tool.
<!--l. 277--><p class="indent" >   The gradient editor displays the current ramp of color that is used for certain
coloring schemes for both particles and vectorlines. The gradient is specified by a
series of color knots. Color is linearly interpolated between the knots to produce a
smooth ramp. Changing the gradient is accomplished entirely with mouse
input. Clicking and dragging a knot updates its position. New knots with
the current color can be added, and existing knots can be deleted. The
&#8220;number of generated colors&#8221; field controls the fidelity of the generated
gradient: if only a small number of discrete colors is desired, set this field
to a low value. Gradients can be also be saved and loaded to and from
files.
<!--l. 279--><p class="indent" >   The positioning tool is found under Edit <span 
class="cmsy-10x-x-120">&#x2192; </span>Position Camera/Lights. This tool

allows mouse-based positioning of light sources and the camera. To point the
camera into a specific position, select the modal toggle to place a camera position
and target into the scene, then press the &#8220;Force Camera Position&#8221; button. The
viewpoint will be locked into this position until the escape key is pressed or the
option is disabled under &#8220;Scene Options.&#8221; A camera cone showing the range of
the potential viewpoint can be drawn during this process. Selecting the
light toggles allows you to move the lights around the scene interactively.
Depending on the lighting options, the rendered position may be the light&#8217;s
direction or point position. Pressing escape will exit this positioning mode as
well.
<!--l. 281--><p class="indent" >   The vector length scaler, found under the &#8220;View&#8221; menu, allows interactive
adjustment of vector glyph length. Each vectorline type can be scaled
by dragging or clicking its corresponding scaler bar. The scale values
are exactly as they are found in the &#8220;Scene Options&#8221; dialog. When you
have finished scaling, press escape or close the tool to return to normal
input.
<!--l. 283--><p class="noindent" >
   <h3 class="sectionHead"><span class="titlemark">4   </span> <a 
 id="x1-160004"></a>Analysis</h3>
<!--l. 284--><p class="noindent" >A series of tools are provided in ParticleVis that are useful for simple analysis.
The ability to mark particles by mouse selection, region, or ID is provided.
Each marked particle is given a highlighted color in the visualization, a
pathline of configurable length, and a line of text in the console that
reports current position and velocity. More advanced marking operations
are provided in the visibility selection tool. A facility for bounding or
clipping out spatial regions is also provided. It is also possible to generate
windowed graphs that display individual particle state information over
time.
<!--l. 286--><p class="indent" >   The aim of all these features is to allow more specific queries into the loaded
data. However, there are few features inside ParticleVis proper that are able to
generate derived data from the particle states. Instead, file formats such as
color and surface maps exist to allow arbitrarily generated data to be
loaded onto the visualized particles. Subgraphs of scalar value per time
step (comma separated value files) can also be loaded and displayed in
subwindows. If the existing coloring options are insufficient, color maps
allow the loading of color information for any or all of the particles at

each timestep. Surface maps allow even more control, as they specify an
array of scalars that are mapped onto each rendered particle. The vector
file format can also be used to overlay additional data onto the loaded
state, and volume files can be used to provide additional (static) spatial
data.
<!--l. 288--><p class="noindent" >
   <h4 class="subsectionHead"><span class="titlemark">4.1   </span> <a 
 id="x1-170004.1"></a>Marking Particles</h4>
<!--l. 290--><p class="noindent" >Each particle in the visualization possesses a marking state that indicates if the
particle should be highlighted and tracked. Particles may also be hidden, or
flagged to indicate that they should not be drawn transparently. Marking can be
done using the mouse, ID input, or options in XML files. The edit menu contains
the marking commands: &#8220;Mark particles for Tracking&#8221; (&#8216;p&#8217; key), &#8221;Mark particle to
hide&#8221; (&#8216;h&#8217; key), and &#8220;Mark particle to follow&#8221; use mouse input. Following a
particle will lock the camera target to the position of the marked particle until the
command is repeated or escape is pressed. &#8220;Mark particle by ID&#8221; (&#8216;i&#8217; key) uses a
numerical ID that corresponds to the ordering of particles in the statefile, starting
from zero. The &#8220;Unmark all Particles&#8221; or the &#8216;u&#8217; key will clear all marking
states.
<!--l. 292--><p class="indent" >   More complex marking operations can be performed using the visibility
selector, found under the edit menu. Most of the visibility functionality requires a
graphics card that supports hardware occlusion queries. The visibility selector
allows all currently visible particles or all particles within a selected region to be
marked. Optionally, the inverse of the selection (hidden particles) can be used by
selecting the &#8220;Select Occluded Particles&#8221; radio button. The marking action that
is applied is determined by the selection of checkboxes in the selector
dialog. Pressing period or &#8220;Select Entire View&#8221; will use the entire rendered
viewpoint for selection, while pressing semicolon or &#8220;Select Region&#8221; allows a
rectangular area to be drawn out for selection. The &#8220;Invert Marking&#8221;
command (forward slash) will invert the mark state of all particles: currently
unmarked particles will be marked, and currently marked particles will be
unmarked. When all particles are unselected this can be used to quickly mark
the whole set. &#8220;Reset States&#8221; will clear all marking information from
particles.

<!--l. 294--><p class="noindent" >
   <h4 class="subsectionHead"><span class="titlemark">4.2   </span> <a 
 id="x1-180004.2"></a>Bounding Particles</h4>
<!--l. 296--><p class="noindent" >The bounding options in ParticleVis allow you to restrict particle rendering to a
certain spatial range. Opening the bounds dialog under the edit menu allows the
configuration of a range of allowed X, Y, or Z positions. Enabling one or more of
the checks will engage the range check. This can also be thought of as a series of
axis aligned clipping planes.
<!--l. 298--><p class="indent" >   When transparency is enabled, you can render both bounded and unbounded
particles by selectively applying transparency to particles outside the range
instead of hiding them. The &#8220;draw bounded particles under transparency&#8221; option
controls this feature.
    
</body></html> 



